package cn.bonoon.kernel.menus.tips;

import java.util.List;

import cn.bonoon.kernel.menus.AbstractMenuable;

/**
 * 返回的提示的信息
 * @author jackson
 *
 */
public class MenuTipResult {
	
	/** 频道或菜单的Id */
	private final String key;
	
	/** 频道或菜单的名称 */
	private final String name;
	private final MenuTipArguments argument;
	
	/** 会直接被放在菜单的名称的后面 */
	private Object content;
	
	/** 这个是鼠标放上去后显示的内容 */
	private Object tip;
	
	public MenuTipResult(AbstractMenuable menu, MenuTipArguments argument) {
		this.key = menu.getId();
		this.name = menu.getName();
		this.argument = argument;
	}
	
	public boolean result(List<?> items){
		Object[] args = internalResolve(items);
		if(null == args){
			content = null;
			tip = null;
			return false;
		}
		
		String format = argument.getFormat();
		if(null != format){
			tip = String.format(format, args);
			return true;
		}
		
		//没有定义格式化的情况，直接把所有的字段组合起来
		String str = "";
		for(int i = 0; i < args.length; i++){
			str += "," + args[i];
		}
		tip = str.substring(1);
		return true;
	}
	
	private Object[] internalResolve(List<?> items){
		//正常来讲items应该只有一行数据
		for(Object obj : items){
			if(obj instanceof Object[]){
				Object[] sobjs = (Object[])obj;
				for(int i = 0; i < sobjs.length; i++){
					content = parse(sobjs[i]);
					if(null != content){
						return sobjs;
					}
				}
				
				//如果不符合条件的，则重新尝试读取下一个对象
				continue;
			}
			
			//返回值只有一个的情况
			content = parse(obj);
			if(null != content){
				return new Object[]{ content };
			}
		}
		
		return null;
	}
	
	private Object parse(Object obj){
		if(obj instanceof Number && ((Number) obj).intValue() == 0) return null;
		
		return obj;
	}
	
	public String getKey() {
		return key;
	}
	
	public String getName() {
		return name;
	}
	
	public Object getTip() {
		return tip;
	}
	
	public Object getContent() {
		return content;
	}

	public boolean isShowTip(){
		return null != tip;
	}
	
	public boolean isEmpty(){
		return null == content;
	}
}
